/**
 * Created by taohj on 2015/1/7.
 *
 * 界面 初始化
 */


var context={};
$(function () {
    context.mainDialog = $("<div><div></div></div>");
    context.tabs = context.mainDialog.find("div");

    //初始化 主窗口
    context.mainDialog.dialog({
        title: '数据挖掘分析系统',
        width: 1000,
        height: 620,
        top:50,
        closable: false
    });

    //初始化标签页
    context.tabs.tabs({
        border:false,
        fit:true
    });

    context.tabs.tabs("add",{
        title:'预处理',
        href:'preprocessServlet?action=input',
        closable:false,
        selected:true

    });

    context.tabs.tabs("add",{
        title:'分类算法',
        href:'classifyServlet?action=input',
        closable:false,
        selected:true
    });

    context.tabs.tabs("add",{
        title:'聚类算法',
        href:'clustererServlet?action=input',
        closable:false,
        selected:false
    });

    context.tabs.tabs("add",{
        title:'关系算法',
        href:'associationsServlet?action=input',
        closable:false,
        selected:false
    });

    /**
     * @param tab
     * @param title
     * @param clases
     * 显示参数温度通用方法
     * */
    context.viewdocs=function (tab,title,classes){
        var  dialog=$("<div></div>");
        if(!classes){
            alert("请选择算法");
            return;
        }
        var href="docs/"+classes+".jsp";
        dialog.dialog({
            title: title,
            width: 800,
            height: 600,
            cache: false,
            href: href,
            modal: false,
            closable:true,
            buttons:[
                {
                    text:'关闭',
                    handler:function(){
                        dialog.dialog("close");
                    }
                }
            ],
            onLoadError:function(){
                alert("找不到相关说明");
                dialog.dialog("close");
            }
        });
    };


    /**
     *@param  viewInputStr
     * 根据字符串 获得参数 数组
     * */
    context.getOptionFromViewInputStr=function(viewInputStr){
        var optionArray=[];
        var options=viewInputStr.split(" -");

        for(var i=1;i<options.length;i++){
            optionArray[i-1]={};
            optionArray[i-1].name=options[i].substr(0,options[i].indexOf(" "));
            optionArray[i-1].value=options[i].substr(options[i].indexOf(" ")+1);
        }
        return optionArray;
    };

    /**
     * @param  tab  标签页对象
     * @param  key  算法类全名
     *
     * 获得算法参数 默认值 字符串
     * */
    context.getDefalultParamsStr=function(tab,key){
        var paramStr="";
        var paramObject=context.getParams(tab,key);
        if(!paramObject){
            return "";
        }
        for(var i=0;i<paramObject.params.length;i++){
            var param=paramObject.params[i];
            paramStr+=" -"+param.name+" "+param.defalutValue;
        }
        return paramStr;
    }

    /**
     * @param tab 标签页 对象
     * @eparm key 算法类名
     * 根据 Key 获得参数对象
     * */
    context.getParams=function(tab,key){

        var paramObject;
        for(var i= 0;i<tab.params.length;i++){
            if(key==tab.params[i].key){
                paramObject=tab.params[i];
            }
        }
        return paramObject;
    };

    /**
     * @param 标签页 对象
     * @param classInput 算法类输入框
     * @param viewInput  算法参数的显示输入框
     * 初始化参数输入框
     * */
    context.setParams=function(tab,classInput,viewInput){

        $("input", viewInput.next("span")).click(function () {
            var clazz=classInput.val();
            var title = clazz.substr(clazz.lastIndexOf(".")+1);
            if (!title) {
                return;
            }
            var dialog = $("<div></div>");
            var clazz = classInput.val();
            var paramObject=context.getParams(tab,clazz);
            if(!paramObject){
                alert("该算法暂不支持参数设置");
                return;
            }

            //获得已设置值的参数数组
            var optionArray= context.getOptionFromViewInputStr( viewInput.textbox("getValue"));


            //拼接参数窗口的HTML
            var htmlBuffer="<form style='padding: 10px 10px 10px 20px;'>";
            htmlBuffer+="<table align='center' style='width:100%;font-size: 12px; line-height: 30px;'>";
            for(var i=0;i<paramObject.params.length;i++){
                /**
                 *  判断是否已设置，如果没有，使用默认值.
                 * */
                var tmp=null;
                for(var j=0;j<optionArray.length;j++){
                    if(optionArray[j].name==paramObject.params[i].name){
                        tmp=optionArray[j];
                    }
                }
                htmlBuffer+="<tr>";
                htmlBuffer+="<td style='text-align: center;vertical-align: top;width: 40px;font-size: 16px;'>";
                //参数名称
                htmlBuffer+=paramObject.params[i].name+":&nbsp;";
                htmlBuffer+="</td>";
                htmlBuffer+="<td style='width: 280px;vertical-align: top;'>";

                htmlBuffer+="<input  name='"+paramObject.params[i].name+"' style='width: 260px; height:26px;font-siz:26px;'";
                /**
                 *  判断是否已设置，如果没有，使用默认值.
                 * */
                if(tmp){
                    htmlBuffer+=" value='"+tmp.value+"'";
                }else{
                    htmlBuffer+=" value='"+paramObject.params[i].defalutValue+"'";
                }
                htmlBuffer+=" />";
                htmlBuffer+="</td>";
                htmlBuffer+="<td style='text-align: left;color: rgb(0,153,102);vertical-align: top;'>";
                //中文解释
                htmlBuffer+=paramObject.params[i].text+"";
                htmlBuffer+="</td>";
                htmlBuffer+="</tr>";
            }
            htmlBuffer+="</table>";


            /*
            * 拼接注释
            * */
            if(paramObject.remark && paramObject.remark.length){
                htmlBuffer+="<div style='margin-top: 20px;'>";
                htmlBuffer+="<span>注释：</span><br/>";
                htmlBuffer+="<ul>";
                for(var r in paramObject.remark){
                    htmlBuffer+="<li>";
                    htmlBuffer+=paramObject.remark[r];
                    htmlBuffer+="</li>";
                }
                htmlBuffer+="</ul>";
                htmlBuffer+="</div>";
            }

            htmlBuffer+="</form>";
            dialog.html(htmlBuffer);

            dialog.dialog({
                title: title,
                width: "auto",
                top:150,
                modal:true,
                buttons: [
                    {
                        text: '确定',
                        handler: function () {

                            var form=dialog.find("form");
                            var viewParam=clazz.substr(clazz.lastIndexOf(".")+1);
                            var params="";

                            var fields=form.serializeArray();
                            for(var i=0;i<fields.length;i++){
                                if(fields[i].name && fields[i].value){
                                    params+=" -"+fields[i].name+" "+fields[i].value;
                                }
                            }
                            viewParam+=params;
                            viewInput.textbox("setValue",viewParam);
                            dialog.dialog("close");

                        }
                    }, {
                        text: '取消',
                        handler: function () {
                            dialog.dialog("close");
                        }
                    }
                ]
            });

        });
    };







});





var progressdialog;
var interval;

function ajaxStart(){

    progressdialog=$("<div><div></div></div>");
    var progressbar=progressdialog.find("div");

    progressdialog.dialog({
        modal:true,
        width:500,
        title:'正在处理....请稍后...',
        height:60
    });

    progressbar.progressbar({
        value:0
    });


    interval=setInterval(function () {

        var value = progressbar.progressbar('getValue');
        if (value < 100){
            value= value+Math.floor(Math.random() * 10);
            progressbar.progressbar('setValue', value);
        }else{
            clearInterval(interval)
        }

    },200);
}


function ajaxComplete(){
    clearInterval(interval);
    progressdialog.dialog('destroy');
}


$(document).ajaxStart(ajaxStart);


$(document).ajaxComplete(ajaxComplete);








